package com.touni.designpattern.prototypepattern;

/**
 * @ClassName : PrototypeDemo
 * @Description :原型模式  属于创建型设计模式
 * 使用场景：
 *1、资源优化场景。 2、类初始化需要消化非常多的资源，这个资源包括数据、硬件资源等。 3、性能和安全要求的场景。
 * 4、通过 new 产生一个对象需要非常繁琐的数据准备或访问权限，则可以使用原型模式。 5、一个对象多个修改者的场景。
 * 6、一个对象需要提供给其他对象访问，而且各个调用者可能都需要修改其值时，可以考虑使用原型模式拷贝多个对象供调用者使用。
 * 7、在实际项目中，原型模式很少单独出现，一般是和工厂方法模式一起出现，通过 clone 的方法创建一个对象，然后由工厂方法提供给调用者。
 * 原型模式已经与 Java 融为浑然一体，大家可以随手拿来使用。
 *
 * 注意事项：与通过对一个类进行实例化来构造新对象不同的是，原型模式是通过拷贝一个现有对象生成新对象的。浅拷贝实现 Cloneable，重写，深拷贝是通过实现 Serializable 读取二进制流。
 *
 * @Author : lwq
 * @Date: 2020-10-20 19:37
 */
public class PrototypeDemo {
    public static void main(String[] args) {
        ShapeTable.initShapeMap();
        Shape circle = ShapeTable.getShapeFromTable("circle");
        circle.draw();
        Shape trapezoid = ShapeTable.getShapeFromTable("trapezoid");
        trapezoid.draw();
    }
}
